package com.wang.nio;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;

import org.junit.Test;

public class WatchServiceTest {

	/*
	使用WatchService监控文件变化	
	在以前的Java版本中,如果程序需要监控文件系统的变化,则可以考虑启动一条后台线程,这条后台线程每隔一段时间去遍历一次指定目录的文件,
	如果发现此次遍历的结果与上次不同,则认为文件发生了变化. 但在后来的NIO.2中,Path类提供了register方法来监听文件系统的变化.

	 */
	
	
	@Test
	public void test() throws Exception{
		
		watch("D:/tmp");
				
	}
	
	private void watch(String directory) throws Exception {
		
		WatchService service = FileSystems.getDefault().newWatchService();
		Paths.get(directory).register(service, StandardWatchEventKinds.ENTRY_CREATE,
				StandardWatchEventKinds.ENTRY_DELETE,StandardWatchEventKinds.ENTRY_MODIFY);
		while(true){
			WatchKey key = service.take();		
			for(WatchEvent<?> event :key.pollEvents()){
				System.out.println(event.count());
				System.out.println(event.context()+":"+event.kind());
			}
			//if the watch key could not be reset because it is  no longer valid		    
			if(!key.reset()){
				break;
			}
		}
	}
	
}
